from django import http
from django.shortcuts import render

# Create your views here.
from django.views import View

from apps.areas.models import Area
from django.core.cache import cache


class ProvinceAreasView(View):

    def get(self, request):
        """提供省级地区数据
        1.查询省级数据
        2.序列化省级数据
        3.响应省级数据
        """
        # 查询缓存中是否有省份数据
        data = cache.get("province_list")
        if data:
            # 缓存有数据
            print("缓存中有省份数据，不查询数据库了，直接取缓存的数据")
            return http.JsonResponse({'code': 0, 'errmsg': 'OK', 'province_list': data})

        print("缓存中没有省份数据，我要自己取数据库查询。。。")

        try:
            # 1.查询省级数据
            province_model_list = Area.objects.filter(parent__isnull=True)

            # 2.整理省级数据
            province_list = []
            for province_model in province_model_list:
                province_list.append({'id': province_model.id,
                                      'name': province_model.name})

        except Exception as e:
            # 如果报错, 则返回错误原因:
            return http.JsonResponse({'code': 400, 'errmsg': '省份数据错误'})

        #将本次查询的数据存入缓存，为了下一次方便
        cache.set("province_list", province_list, 60*60)
        print("本次查询的数据，已经存入缓存了")

        # 3.返回整理好的省级数据
        return http.JsonResponse({'code': 0, 'errmsg': 'OK', 'province_list': province_list})

class SubAreasView(View):
    """子级地区：市和区县"""

    def get(self, request, pk):
        """提供市或区地区数据
        1.查询市或区数据
        2.序列化市或区数据
        3.响应市或区数据
        """



        try:
             # 1.查询市或区数据
            sub_model_list = Area.objects.filter(parent=pk)
             #  查询省份数据
            parent_model = Area.objects.get(id=pk)

            # 2.整理市或区数据
            sub_list = []
            for sub_model in sub_model_list:
                sub_list.append({'id': sub_model.id,
                                 'name': sub_model.name})

            sub_data = {
                'id': parent_model.id,  # pk
                'name': parent_model.name,
                'subs': sub_list
            }

        except Exception as e:
            return http.JsonResponse({'code': 400,
                                      'errmsg': '城市或区县数据错误'})


        # 3.响应市或区数据 ok: 0
        return http.JsonResponse({'code': 0,
                                  'errmsg': 'OK',
                                  'sub_data': sub_data})


class TestTemplate(View):

    def get(self,request):
        data = [
            {
            "stuname":"张三1ABC_abc",
            "stuage":"20"
            },{
            "stuname":"张三2XY",
            "stuage":"20"
            },{
            "stuname":"张三3",
            "stuage":"20"
            }]
        return render(request, "areas/index.html", {"datakey":data})